import java.util.List;

public interface Graph<V>{
    //返回图中的顶点数
    public int getSize();
    //返回图中的顶点（列表）
    public List<V> getVertices();
    //返回指定下标的顶点
    public V getVertex(int index);
    //返回指定顶点的下标
    public int getIndex(V v);
    //返回指定下标顶点的邻居（列表）----邻接顶点线性表的元素
    public List<Integer> getNeighbors(int index);
    //返回指定下标的度
    public int getDegree(int index);
    //打印边
    public void printEdges();
    //清除图
    public void clear();
    //增加顶点
    public boolean addVertex(V v);
    //增加边
    public boolean addEdge(int u, int v);
    //得到一个从指定下标v开始的深度优先搜索树
    public AbstractGraph<V>.Tree dfs(int v);
    //得到一个从指定下标v开始的广度优先搜索树
    public AbstractGraph<V>.Tree bfs(int v);
}